import MD5 from './md5'
function formatTime(date) {
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var hour = date.getHours();
  var minute = date.getMinutes();
  var second = date.getSeconds();
  return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':');
}
function formatDate(date){
  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();l
  return [year, month].map(formatNumber).join('-');
}
function formatNumber(n) {
  n = n.toString();
  return n[1] ? n : '0' + n;
}

function randomString(len) {
　　len = len || 32;
　　var $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';    /****默认去掉了容易混淆的字符oOLl,9gq,Vv,Uu,I1****/
　　var maxPos = $chars.length;
　　var pwd = '';
　　for (var i = 0; i < len; i++) {
　　　　pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
　　}
　　return pwd;
}

function _toQueryPair(key, value) {
  if (typeof value == 'undefined'){
    return key;
  }
  return key + '=' + (value === null ? '' : String(value));
}

function toQueryString(obj) {
  var ret = [];
  for(var key in obj){
  var values = obj[key];
  if(values && values.constructor == Array){//数组
  var queryValues = [];
  for (var i = 0, len = values.length, value; i < len; i++) {
    value = values[i];
    if(values !== '' && values !== undefined && values !== null) {
      queryValues.push(_toQueryPair(key, value));
    }
  }
    ret = ret.concat(queryValues);
  }else{ //字符串
      if(values !== '' && values !== undefined && values !== null) {
        ret.push(_toQueryPair(key, values));
      }
  }
  }
  return ret.sort().join('&');
}

function signToParam(user,param) {
  param.curtime = Date.parse(new Date());
  param.noncestr = randomString(12);
  var searchs = toQueryString(param);
  if(user && typeof user.key === 'undefined') {
    user.key = '';
  }
  var querys = searchs + '&key=' + user.key;
  param.sign = MD5.md5(querys).toUpperCase();
}

function setCookie(name, value) {
  var days = 30;
  var exp = new Date();
  exp.setTime(exp.getTime() + days*24*60*60*1000);
  document.cookie = name + "="+value + ";expires=" + exp.toGMTString();
}

function getCookie(cname) {
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for (var i = 0; i < ca.length; i++) {
    var c = ca[i];
    console.log(c)
    while (c.charAt(0) == ' ') c = c.substring(1);
    if (c.indexOf(name) != -1){
      return c.substring(name.length, c.length);
    }
  }
  return "";
}

function delCookie(name)
{
  var exp = new Date();
  exp.setTime(exp.getTime() - 1);
  var cval=getCookie(name);
  if(cval!=null)
    document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}


/*
    函数，加法函数，用来得到精确的加法结果
    说明：javascript的加法结果会有误差，在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
    参数：arg1：第一个加数；arg2第二个加数；d要保留的小数位数（可以不传此参数，如果不传则不处理小数位数）
    调用：Calc.Add(arg1,arg2,d)
    返回值：两数相加的结果
    */
function add(arg1, arg2) {
  arg1 = arg1.toString(), arg2 = arg2.toString();
  var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
  var maxLen = Math.max(d1.length, d2.length);
  var m = Math.pow(10, maxLen);
  var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
  var d = arguments[2];
  return typeof d === "number" ? Number((result).toFixed(d)) : result;
}
/*
函数：减法函数，用来得到精确的减法结果
说明：函数返回较为精确的减法结果。
参数：arg1：第一个加数；arg2第二个加数；d要保留的小数位数（可以不传此参数，如果不传则不处理小数位数
调用：Calc.Sub(arg1,arg2)
返回值：两数相减的结果
*/
function sub(arg1, arg2) {
  return add(arg1, -Number(arg2), arguments[2]);
}
/*
函数：乘法函数，用来得到精确的乘法结果
说明：函数返回较为精确的乘法结果。
参数：arg1：第一个乘数；arg2第二个乘数；d要保留的小数位数（可以不传此参数，如果不传则不处理小数位数)
调用：Calc.Mul(arg1,arg2)
返回值：两数相乘的结果
*/
function mul(arg1, arg2) {
  var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
  m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
  resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
  return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
}
/*
函数：除法函数，用来得到精确的除法结果
说明：函数返回较为精确的除法结果。
参数：arg1：除数；arg2被除数；d要保留的小数位数（可以不传此参数，如果不传则不处理小数位数)
调用：Calc.Div(arg1,arg2)
返回值：arg1除于arg2的结果
*/
function div(arg1, arg2) {
  var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
  m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
  resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
  return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
}

function sacn(wechatCallback,alipayCallback) {
  var env = localStorage.getItem('borwserenv');
  if(env == 'alipay'){
    if(alipayCallback) {
      alipayCallback();
    }else {
      ap.scan(function(res){
        if(res.code) {
          window.location.href = res.code
        }
      });
    }
  }else if(env == 'wechat') {
    wechatCallback();
  } else {
    alert('请使用微信或支付宝扫一扫');
  }
}

function authLogin(wechatApi,alipayApi) {
  var srcurl = window.location.origin + window.location.pathname+'?vt='+new Date().getTime() + window.location.hash;
  var url = encodeURIComponent(srcurl);
  var env = localStorage.getItem('borwserenv');
  if(env == 'alipay'){
    if(window.location.href.indexOf('?') != -1) {
      window.location.href = alipayApi + '?callback_url='+url;
    }else {
      window.location.href = alipayApi + '?callback_url='+url+'?login=true';
    }
  }else{
    if(window.location.href.indexOf('?') != -1) {
      window.location.href = wechatApi + '?callback_url='+url;
    }else {
      window.location.href = wechatApi + '?callback_url='+url+'?login=true';
    }
  }
}

function is_weixn(){
  var ua = navigator.userAgent.toLowerCase();
  if(ua.match(/MicroMessenger/i)=="micromessenger") {
    return true;
  } else {
    return false;
  }
}


export default {
  authLogin:authLogin,
  sacn:sacn,
  formatTime: formatTime,
  formatDate:formatDate,
  randomString: randomString,
  toQueryString: toQueryString,
  signToParam:signToParam,
  setCookie:setCookie,
  getCookie:getCookie,
  delCookie:delCookie,
  add:add,
  sub:sub,
  mul:mul,
  div:div,
  is_weixn:is_weixn
};
